class Solution {
public:
    vector<vector<int>> res;
    set<vector<int>> hash;
    void dfs(vector<int>& nums,int u)
    {
        if(nums.size()==u)
        {
            if(hash.count(nums))
            {
                return;
            }
            else
            {
                res.push_back(nums);
                hash.insert(nums);
                return;
            }
        }
        for(int i=u;i<nums.size();i++)
        {
            swap(nums[i],nums[u]);
            dfs(nums,u+1);
            swap(nums[i],nums[u]);
        }
    }
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        if(!nums.size()) return res;
        dfs(nums,0);
        return res;
    }
};
